#include <iostream>
#include <cstdio>

using namespace std;

typedef unsigned long long ULL; // 用ULL存放后，溢出即为对2^64取模 

const int N = 100010, P = 131;

int n, m;
char str[N];
ULL h[N], p[N]; // p[i]存放的即为p^i ,h[i]存放的即为下标为i的字符串哈希值
                //将字符串看作是p进制的数，用该字符的ASCII码进行计算

ULL get(int l, int r) { // 得到下标从l~r的字符串哈希值 
	return h[r] - h[l - 1] * p[r - l + 1];
}

int main() {
	scanf("%d%d%s", &n, &m, str + 1);
	
	p[0] = 1;
	for (int i = 1; i <= n; i ++ ) {
		p[i] = p[i - 1] * P;
		h[i] = h[i - 1] * P + str[i];
	}
	
	while (m -- ) {
		int l1, r1, l2, r2;
		scanf("%d%d%d%d", &l1, &r1, &l2, &r2);
		
		if (get(l1, r1) == get(l2, r2)) puts("Yes");
		else puts("No");
	}
	
	return 0;
}